<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<link rel="stylesheet" href="../style/journal.css" type="text/css" />
<style type="text/css"><!--
.googleadsense {
	margin: 2px;
	padding: 0px;
//--></style><script src="http://www.google-analytics.com/urchin.js" type="text/javascript">
</script>
<script type="text/javascript">
_uacct = "UA-65008-1";
urchinTracker();
</script><title>Inside Out Object</title>
</head>
<body>
<a href="index.html">Journal</a>(2005) | <a href="../blog/"><b>Blog</b></a>(2006) | <a href="http://www.fayland.org/cgi-bin/random_link.pl">RandomLink</a> | <a href="AboutFayland.html">WhoAmI</a> | <a href="LiveBookmark.html">LiveBookmark</a> | <a href="http://www.fayland.org/">HomePage</a>
<p><&lt;Previous: <a href="060115.html">Guys, it's over</a>&nbsp;&nbsp;>>Next: <a href="060218.html">回到学校</a></p>
<h1>Inside Out Object</h1>
<div class='content'>
<p>Category: <a href='Modules.html'>Modules</a> &nbsp; Keywords: <b>InsideOut Object</b></p>最近在 <a href='http://www.perlmonks.org/'>PerlMonks.org</a> 很红火的一个主题便是 "Inside Out Object".<br />

<a href='http://www.perlmonks.org/?node_id=360998'>xdg</a> 简单的总结了下便有下面这么多连接：

<p><b>Object-Oriented Perl - Inside-Out Technique</b></p>

<ul>
<li><a href="http://www.perlmonks.org/?node_id=178518">Re: Where/When is OO useful?</a></li>
<li><a href="http://www.perlmonks.org/?node_id=219131">Re: Tutorial: Introduction to Object-Oriented Programming</a></li>
<li><a href="http://www.perlmonks.org/?node_id=219728">A different OO approach</a></li>
<li><a href="http://www.perlmonks.org/?node_id=219924">Yet Another Perl Object Model (Inside Out Objects)</a></li>
<li><a href="http://www.perlmonks.org/?node_id=220776">Class::InsideOut - yet another riff on inside out objects.</a></li>

<li><a href="http://www.perlmonks.org/?node_id=483162">Threads and fork and CLONE, oh my!</a></li>
<li><a href="http://www.perlmonks.org/?node_id=492933">inside-out objects using arrays?</a></li>
<li><a href="http://www.perlmonks.org/?node_id=508329">Array-based Inside-out Objects with Object::InsideOut</a></li>
<li><a href="http://www.perlmonks.org/?node_id=508694">How to use Inheritance with Inside-Out Classes and Hash Based Classes</a></li>
<li><a href="http://www.perlmonks.org/?node_id=514941">Inside-out objects inheriting from hash-based classes</a></li>
<li><a href="http://www.perlmonks.org/?node_id=514605">Seeking inside-out object implementations</a></li>
<li><a href="http://www.perlmonks.org/?node_id=515650">Anti-inside-out-object-ism</a></li>
<li><a href="http://www.perlmonks.org/?node_id=520952">Overriding bless for inside-out object safety</a></li>
<li><a href="http://www.perlmonks.org/?node_id=521997">Introducing Class::InsideOut</a></li>

</ul>

Inside Out Object 是 OO 的另一种实现方法，它与我们寻常的基于 Hash 的 OO 写法不一样。<br />
最近的一份讲演稿就简单的阐述了一下不同之处：<a href='http://dagolden.com/talks/20060117_whats_all_the_fuss.pdf'>http://dagolden.com/talks/20060117_whats_all_the_fuss.pdf</a>

<h2>My Opionion</h2>
<p>因为我也在学习之中，所以就写写自己的看法。不当之处请指正。</p>

<p>在 Damain Conway 的新书 Perl Best Practices 中有一个章节便是专门讲 "Inside Out Object", 以前看到过觉得比较麻烦就没有理会跳过去了。<br />
最近碰到这么多帖子就想起再去看 perldoc <a href='http://search.cpan.org/perldoc?Class::Std'>Class::Std</a><br />

在这个 perldoc 中，Damain 解释了为什么 InsideOut 要比普通的 Hash 更好一些。他认为普通的 bless \%hash $module; 对 $hash 里的东西都可以直接读写，没有保护好。这不是 OO 所应当给予的权利。比如我们有一个模块，里面提供了一个方法：
<pre>sub get_name {
    my $self = shift;
    return $self->{name};
}</pre>
而熟悉这个模块的人可以跳过 get_name 这个方法而直接读写 $object->{name}. 这不是一个好的 OO 习惯。<br />
当然这不是 InsideOut Object 的原意，这只是带来的好处之一。封装变量。<br />
更多的查看那个讲演稿 PDF. 在我看来，InsideOut Object 确实有很多好处，唯一麻烦的就是大家都不太熟悉和习惯。</p>

<p>因为最近回了家，用我表弟的电脑在上网。他也没装 Perl 所以我也没机会对 <a href='http://search.cpan.org/perldoc?Object::InsideOut'>Object::InsideOut</a> 和 <a href='http://search.cpan.org/perldoc?Class::InsideOut'>Class::InsideOut</a> 做试验。<br />

只好等假期过完回到学校再说了。诸位有机会还是可以试试这个的。Have fun!</p></div>
<p><&lt;Previous: <a href="060115.html">Guys, it's over</a>&nbsp;&nbsp;>>Next: <a href="060218.html">回到学校</a></p>
<p><strong>Options:</strong> <a href='http://del.icio.us/post?title=Inside%20Out%20Object&url=http://www.fayland.org/journal/InsideOut.html'>+Del.icio.us</a></p>

Created on <span class="digit">2006-02-18 22:46:42</span><br />
Copyright 2004-2006 All Rights Reserved. Powered by <a href="Eplanet.html">Eplanet</a> && <a href='http://catalyst.perl.org'>Catalyst</a> 5.64.
</body>
</html>